ديف أوبس

تشغيل Nginx على Docker

جدول المحتوى

تشغيل Nginx في حاوية Docker على نظام Ubuntu: دليل شامل ومفصل

يُعتبر Nginx من أشهر وأقوى خوادم الويب المتاحة اليوم، حيث يُستخدم بشكل واسع لاستضافة المواقع، العكس العكسي، وتحميل المحتوى بشكل سريع وفعال. من جهة أخرى، تُعد تقنية Docker واحدة من أكثر الأدوات ثورية في عالم تطوير البرمجيات، حيث تتيح حزم التطبيقات مع كل متطلباتها في حاويات مستقلة قابلة للنقل والتشغيل على أي بيئة. دمج Nginx مع Docker يفتح آفاقاً واسعة للاعتمادية، السرعة، والمرونة في إدارة خوادم الويب.

في هذا المقال، سنتناول شرحاً مفصلاً وعميقاً حول كيفية تشغيل Nginx داخل حاوية Docker على نظام Ubuntu، بدءًا من تثبيت Docker، مروراً بإنشاء وتشغيل حاوية Nginx، وصولاً إلى التعامل مع الإعدادات المتقدمة وضبط الأداء والأمان.


1. مقدمة عن Docker وNginx

Docker

Docker هو منصة مفتوحة المصدر تتيح تطوير التطبيقات، نشرها، وتشغيلها داخل حاويات (Containers). الحاوية عبارة عن بيئة تشغيل معزولة تحتوي على التطبيق وجميع المكتبات والأدوات التي يحتاجها ليعمل بشكل صحيح، مما يضمن التوافقية بين بيئات التطوير والإنتاج.

Nginx

Nginx هو خادم ويب عالي الأداء يُستخدم لتقديم صفحات الويب، التعامل مع طلبات HTTP وHTTPS، التوزيع العكسي للحمل (Reverse Proxy)، التوازن بين الخوادم (Load Balancing)، وغيرها من الوظائف المتعلقة بشبكات الإنترنت.


2. متطلبات أساسية قبل البدء

  • نظام تشغيل Ubuntu (يفضل إصدار 20.04 أو أحدث)

  • صلاحيات المستخدم الجذر (root) أو مستخدم لديه صلاحيات sudo

  • اتصال بالإنترنت لتحميل Docker وصور Nginx من الإنترنت


3. تثبيت Docker على Ubuntu

3.1 تحديث النظام

في البداية، يجب تحديث قائمة الحزم لضمان تثبيت أحدث الإصدارات:

bash
sudo apt update sudo apt upgrade -y

3.2 تثبيت الحزم الضرورية

لتثبيت Docker، نحتاج إلى بعض الحزم الأساسية مثل apt-transport-https و ca-certificates و curl و software-properties-common:

bash
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

3.3 إضافة مفتاح Docker الرسمي ومستودع الحزم

bash
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

3.4 تثبيت Docker Engine

بعد تحديث قائمة الحزم من المستودع الجديد:

bash
sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io -y

3.5 التحقق من تثبيت Docker

لتأكد من نجاح التثبيت، نفذ الأمر:

bash
sudo docker --version

يجب أن يظهر إصدار Docker المثبت.

3.6 إضافة المستخدم إلى مجموعة Docker (اختياري)

لتجنب استخدام sudo مع كل أمر Docker:

bash
sudo usermod -aG docker $USER

بعد ذلك، يجب تسجيل الخروج وتسجيل الدخول مجدداً لتفعيل التغيير.


4. تشغيل Nginx داخل حاوية Docker

4.1 سحب صورة Nginx الرسمية من Docker Hub

Docker Hub هو مستودع صور Docker الرسمية، وتشغيل Nginx من خلال صورة رسمية يضمن حصولنا على نسخة نظيفة ومحدثة من الخادم.

bash
docker pull nginx:latest

4.2 تشغيل الحاوية مع تعيين منفذ

لتشغيل Nginx داخل حاوية مع توجيه منفذ 80 من الحاوية إلى منفذ 80 على النظام المضيف:

bash
docker run --name my-nginx -p 80:80 -d nginx
  • --name my-nginx يحدد اسم الحاوية.

  • -p 80:80 يربط منفذ 80 في الحاوية مع منفذ 80 على المضيف.

  • -d لتشغيل الحاوية في الخلفية (detached mode).

4.3 التحقق من عمل الحاوية

لفحص حالة الحاوية:

bash
docker ps

يجب أن ترى الحاوية تعمل، ويمكنك زيارة عنوان IP الخاص بالخادم أو localhost في المتصفح لرؤية صفحة Nginx الافتراضية.


5. تخصيص إعدادات Nginx داخل الحاوية

5.1 إعداد مجلد للموقع على النظام المضيف

لإدارة ملفات الموقع بسهولة، من الأفضل ربط مجلد من نظام المضيف مع الحاوية:

bash
mkdir -p ~/nginx/html

ثم إضافة ملف index.html مخصص داخل هذا المجلد:

html
html> <html> <head> <title>موقع تجريبي على Nginx Dockertitle> head> <body> <h1>مرحباً بك في موقع Nginx داخل حاوية Docker على Ubuntu!h1> body> html>

5.2 تشغيل الحاوية مع ربط مجلد الموقع

bash
docker run --name my-nginx -p 80:80 -v ~/nginx/html:/usr/share/nginx/html:ro -d nginx
  • -v لتوصيل مجلد المضيف بمجلد الحاوية.

  • :ro تعني أن المجلد مخصص للقراءة فقط داخل الحاوية (لمنع التعديل من الحاوية).

5.3 تعديل ملفات إعداد Nginx (اختياري)

لإجراء تغييرات على ملف إعداد Nginx nginx.conf:

  1. إنشاء مجلد للإعدادات على المضيف:

bash
mkdir ~/nginx/conf
  1. نسخ ملف الإعداد الافتراضي من الحاوية إلى المضيف (يمكن استخدام الحاوية المؤقتة أو البحث عن نسخة على الإنترنت):

bash
docker run --rm nginx cat /etc/nginx/nginx.conf > ~/nginx/conf/nginx.conf
  1. تعديل ملف nginx.conf حسب الحاجة.

  2. تشغيل الحاوية مع ربط ملف الإعداد:

bash
docker run --name my-nginx -p 80:80 -v ~/nginx/html:/usr/share/nginx/html:ro -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx

6. إدارة الحاوية وتشغيل الأوامر داخلها

6.1 الدخول إلى الحاوية

للدخول إلى الحاوية واستخدام سطر الأوامر بداخلها:

bash
docker exec -it my-nginx /bin/bash

هنا يمكن تنفيذ أوامر Nginx مثل إعادة التشغيل أو اختبار الإعدادات.

6.2 إعادة تحميل إعدادات Nginx داخل الحاوية

بعد تعديل إعدادات Nginx، يمكن إعادة التحميل دون إيقاف الحاوية:

bash
docker exec my-nginx nginx -s reload

7. إعدادات متقدمة في تشغيل Nginx على Docker

7.1 استخدام ملفات Docker Compose

لتسهيل إدارة الحاوية، يمكن استخدام ملف docker-compose.yml:

yaml
version: "3" services: nginx: image: nginx:latest container_name: my-nginx ports: - "80:80" volumes: - ./html:/usr/share/nginx/html:ro - ./conf/nginx.conf:/etc/nginx/nginx.conf:ro restart: unless-stopped

تشغيل الحاوية عبر Docker Compose:

bash
docker-compose up -d

7.2 تفعيل HTTPS باستخدام Let’s Encrypt

يمكن دمج Nginx مع أدوات مثل Certbot لتفعيل HTTPS بشكل آلي. هناك صور Docker متخصصة مثل nginx-certbot توفر هذه الوظيفة، أو يمكن إعداد الحاوية بشكل مخصص.

7.3 التوازن بين الخوادم (Load Balancing)

Nginx يمكن استخدامه كـ Load Balancer، حيث تقوم بتشغيل عدة حاويات Nginx أو تطبيقات خلفية، وتوزيع الحمل بينها. في Docker، هذا يتطلب إعدادات شبكة مخصصة وربما استخدام Docker Swarm أو Kubernetes.


8. أفضل الممارسات للحفاظ على أداء وأمان Nginx في Docker

8.1 تحديث الصور بانتظام

يجب مراقبة تحديثات صورة Nginx الرسمية لتفادي الثغرات الأمنية والحصول على تحسينات الأداء.

bash
docker pull nginx:latest docker stop my-nginx docker rm my-nginx docker run --name my-nginx -p 80:80 -d nginx

8.2 تقليل صلاحيات الحاوية

يُنصح بعدم تشغيل الحاوية بصلاحيات root إن أمكن، وتقييد الوصول إلى المجلدات الهامة.

8.3 مراقبة موارد الحاوية

يمكن مراقبة استهلاك الموارد مثل الذاكرة والمعالج للحاوية باستخدام:

bash
docker stats my-nginx

8.4 النسخ الاحتياطي للبيانات والإعدادات

الاحتفاظ بنسخ من ملفات الموقع والإعدادات يضمن سرعة الاسترجاع عند حدوث مشاكل.


9. جدول مقارنة بين تشغيل Nginx مباشرة على Ubuntu وتشغيله داخل Docker

المعيار تشغيل Nginx على Ubuntu مباشرة تشغيل Nginx داخل Docker
سهولة التثبيت بسيط مع تحديثات النظام يحتاج إلى تثبيت Docker والتعلم الأولي
العزل يعتمد على نظام التشغيل عزل تام داخل الحاوية
النقلية أقل قابلية للنقل بسهولة قابل للنقل بين الأنظمة المختلفة بسهولة
تحديث الإصدارات يتطلب تحديث النظام أو الحزم بسيط عبر تحديث الصورة فقط
الإدارة إدارة ملفات النظام مباشرة إدارة عبر أوامر Docker أو Docker Compose
الموارد استهلاك الموارد يعتمد على النظام فقط استهلاك موارد إضافية للحاويات
الأمان يعتمد على إعدادات النظام عزل جيد لكن يحتاج إعداد أمان الحاوية
التخصيص مرن جداً مرن لكن ضمن حدود الحاوية

10. الخلاصة

تشغيل Nginx داخل حاوية Docker على نظام Ubuntu يمثل خطوة استراتيجية في مجال إدارة خوادم الويب الحديثة، حيث يجمع بين قوة Nginx وأداء Docker في عزل البيئة وسهولة النشر. هذا الأسلوب يوفر بيئة مستقرة وموثوقة يمكن التحكم بها بشكل دقيق، مع مرونة عالية في التخصيص والنقل.

باتباع الخطوات التفصيلية السابقة، يمكن لأي مسؤول نظام أو مطور إعداد خادم Nginx فعال ضمن حاوية Docker، مما يضمن تجربة تشغيلية متقدمة، سهلة الإدارة، وقابلة للتوسع. كما أن استخدام أدوات مثل Docker Compose يزيد من قوة التحكم ويُبسط العمليات اليومية.


المصادر والمراجع

  1. Official Docker Documentation

  2. Nginx Official Documentation


هذا المقال يوفر رؤية متعمقة وشاملة حول تشغيل Nginx على Docker في بيئة Ubuntu، بما يلبي احتياجات المشاريع الصغيرة والكبيرة على حد سواء.